package com.lzy.redis;

import java.io.Serializable;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * redis 操作基本方法
 *
 * @author lzy
 */
public interface RedisService {
    void set(String key, Object value, Long liveSeconds);

    void set(String key, Object value);

    Set<String> getRedisKeys(String key);

    Boolean setnx(String key, Object value);

    Boolean setnx(String key, Object value, Long liveSeconds);

    Object get(String key);

    void delete(String key);

    Long getExpire(String key);

    Boolean expire(String key, Long liveSeconds);

    Boolean hasKey(String key);

    void setToHash(String key, Object hashKey, Object value);

    void putAllHash(String key, Map<String, Object> map);

    Object getFromHash(String key, Object hashKey);

    Map<Object, Object> getHashToMap(String key);

    Boolean hasHashKey(String key, Object hashKey);

    Set<Object> hashKeys(String key);

    Long hashSize(String key);

    void setToSet(String key, Object value);

    void deleteFromHash(String key, Object... hashKeys);

    Long increment(String key, Long value);

    Long increment(String key);

    Long increment(String key, Long value, Long initValue, Long liveSeconds);

    void sendMessage(String channel, Serializable message);


    void rightPutAllList(String key, Collection objs);

    void leftPutAllList(String key, Collection objs);

    List listLeftPop(String key, int count);

    Long listSize(String key);

    boolean releaseDistributedLock(String lockKey, String requestId);
}